Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
babel-plugin-react-svg
Advanced tools
Babel plugin to transform svg to react component
The babel-plugin-react-svg package is a Babel plugin that allows you to import SVG files as React components. This can be particularly useful for incorporating SVGs directly into your React components without having to manually convert them.
Importing SVG as React Component
This feature allows you to import an SVG file and use it as a React component. The SVG file is transformed into a React component, which can then be used like any other React component.
import MyIcon from './icon.svg';
const App = () => (
<div>
<MyIcon />
</div>
);
Customizing SVG with Props
You can pass props to the imported SVG component to customize its attributes such as width, height, and fill color. This makes it easy to reuse the same SVG with different styles.
import MyIcon from './icon.svg';
const App = () => (
<div>
<MyIcon width="50" height="50" fill="red" />
</div>
);
The react-svg package allows you to import SVG files and use them as React components. It provides a similar functionality to babel-plugin-react-svg but does not require a Babel plugin. Instead, it uses a React component to load and render the SVG.
SVGR is a tool that transforms SVGs into React components. It can be used as a CLI tool, a webpack loader, or a Node.js library. SVGR offers more flexibility and additional features such as optimizing SVGs and customizing the output.
The react-inlinesvg package allows you to load SVGs inline in your React components. It fetches the SVG file and injects it directly into the DOM. This package is useful if you need to dynamically load SVGs at runtime.
A plugin that converts svg to a react component. Used in react-svg-loader
npm i babel-plugin-react-svg --save-dev
# or with yarn
yarn add babel-plugin-react-svg --dev
Input SVG:
<svg class="foo" style='text-align: center; width: 100px' pointer-events="stroke">
<circle cx="50" cy="50" r="25" style="text-align: center;" stroke-width="5" />
</svg>
Output React Component:
import React from "react";
export default ({ styles = {}, ...props}) => <svg
className={styles["foo"] || "foo"}
style={{ textAlign: "center", width: "100px" }}
pointerEvents="stroke"
{...props}>
<circle cx="50" cy="50" r="25" style={{textAlign: "center"}} strokeWidth="5" />
</svg>;
Going from bottom up, the following transformations are applied and the same can be checked in the partly annotated source - babel-plugin
<svg pointer-events="none">
<path stroke-width="5"/>
</svg>
is transformed to
<svg pointerEvents="none">
<path strokeWidth="5"/>
</svg>
React expects style attribute value to be an object. Also, Hyphenated style names are converted to camel case.
<svg style="text-align: center">
<circle style="width: 10px"/>
</svg>
is transformed to
<svg style={{textAlign: 'center'}}>
<circle style={{width: '10px'}}/>
</svg>
The props passed to the output component is passed on to the root SVG node and the props already defined are overridden by the props passed.
<svg width="50">
...
</svg>
is transformed to
<svg width="50" {...props}>
...
</svg>
<svg class="foo bar"/>
is transformed to
<svg className={ (styles["foo"] || "foo") + " " + (styles["bar"] || "bar") }>
The loader should now export the svg component. And this is done by wrapping it in an ArrowFunctionExpression.
<svg>...</svg>
is transformed to
import React from 'react';
export default ({ styles = {}, ...props }) => <svg {...props}>...</svg>;
<svg>
FAQs
Babel plugin to transform svg to react component
The npm package babel-plugin-react-svg receives a total of 129,004 weekly downloads. As such, babel-plugin-react-svg popularity was classified as popular.
We found that babel-plugin-react-svg demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.